iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
8
Modern Web

寫給朋友的 PHP 從 0 到 100 實戰教程系列 第 3

Day 3. PHP教學: 一分鐘搞懂『如果...就...』的 if else 語法

  • 分享至 

  • xImage
  •  

Why
為什麼我們用 PHP 要學邏輯語法呢?
因為生活中總是充滿是非題,例如像是:
『如果』晚點會下雨『就』帶傘,大晴天就不用帶
『如果』考不及格『就』會挨罵
『如果』他敢表白,我『就』答應他
『如果』對方出剪刀,我『就』出石頭

說穿了就是滿足某個條件,就去做某件事。
而我們使用電腦幫我們處理事情時,常常就需要描述這個邏輯。

How
那程式語法要怎麼寫呢?

如果 ( 下雨 ) { 就帶傘 }
  • 小括號 () 裡面放的是條件
  • 大括號 {} 裡面放的是要做的事

用實際的英文語法也一樣

$weather = "rainning";
if($weather == "rainning") { echo "bring an umbrella"; }

What
出現了一些新東西讓我來解釋

  • if( 裡面專門放條件 )
  • 條件的比較用兩個等號 == 代表相等,如果想判斷是否不相等用 !=
  • 這句的意思是 這個變數天氣 等於 字串 "下雨"

如果要做的事情很多,我們習慣這樣寫比較整齊:

if($weather == "rainning") {
  echo "bring an umbrella";
  echo "wear a raincoat";
  echo "wear rain boots";
}

那有如果我要寫不下雨的情況呢?
可以加上 else 稱 否則

if($weather == "rainning") {
  echo "bring an umbrella";
  echo "wear a raincoat";
  echo "wear rain boots";
}else{
  echo "yeah~~~~happy";
  echo "streaking";
}

這樣解釋是不是就很輕鬆看懂了 if (條件) { 符合要執行的事情 } else { 否則要執行的事情 }
萬事起頭難,大城也是一塊一塊磚堆出來。
這就是你的第一塊磚,保持耐心,我們要進入更有挑戰性的主題了。

今天的課後作業是告訴我為什麼結果是印出 No, it is rainning ?

$weather = "sunny";
if($weather = "raining"){
   echo "No, it is ".$weather;
}else{
   echo "Yeah, it is ".$weather;
}

想真的執行 PHP 語法的話,可以到這個網址把問題複製上去,就可以看到答案了。
http://sandbox.onlinephpfunctions.com/


上一篇
Day 2. PHP教學: 把資料記到變數盒子
下一篇
Day 4. PHP教學: 用迴圈解決重複無聊的工作
系列文
寫給朋友的 PHP 從 0 到 100 實戰教程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
pingu
iT邦新手 5 級 ‧ 2018-02-27 15:26:08

我想是因為條件式()裏頭是 = 而不是 ==

= 感覺有指定的意思

== 拿來做邏輯判斷(True & False)

falconwei iT邦新手 5 級 ‧ 2018-02-28 14:38:42 檢舉

YES 沒錯。如果用等號會失去比對判斷的功能

因為 weather 變數在 if 前已經被指定為 sunny 的內容,而進到 if 語法中的括號條件式時,
sunny 不等於 raining
所以印出 no it is rainning ,不知道我的想法是否正確,煩請指正,謝謝!

Hankho99 iT邦新手 5 級 ‧ 2023-08-10 16:42:55 檢舉

是的。
因為$weather 變數己經被置換了內容為"raining",
故 ($weather = "raining") = True
if(True) {echo "No, it is ".$weather;}
所以會列印出 no it is rainning

0
h223449961
iT邦新手 4 級 ‧ 2018-04-01 12:54:04

因為 weather 變數在 if 前已經被指定為 sunny 的內容,而進到 if 語法中的括號條件式時,
sunny 不等於 raining
所以印出 no it is rainning ,不知道我的想法是否正確,煩請指正,謝謝!

微笑 iT邦研究生 5 級 ‧ 2020-12-28 13:50:39 檢舉

因為if中的內容是
$weather = "raining"
不是
$weather == "raining"

if($weather = "raining") 等同將$weather變數變成raining
而附值的行為會給if true的結果,所以執行了No, it is rainning

1
rainbowrain
iT邦新手 2 級 ‧ 2018-07-12 14:48:48
$weather = "sunny";
if($test = "test" - 10){
   echo "No, it is ".$weather."\n";
   echo "test: $test";
}else{
   echo "Yeah, it is ".$weather."\n";
}

Result:
Warning: A non-numeric value encountered in [...][...] on line 4
No, it is sunny
test: -10

$weather = "sunny";
if($test = "test" * 10){
   echo "No, it is ".$weather."\n";
   echo "test: $test";
}else{
   echo "Yeah, it is ".$weather."\n";
   echo "test: $test";
}

Result:
Warning: A non-numeric value encountered in [...][...] on line 4
Yeah, it is sunny
test: 0

從上面兩個例子來看,php自己有一套判斷if()的結果是true或false的標準
($test = "test" - 10)會判斷是true, 而且把"test"當成0-10之後指派給$test
($test = "test" * 10)會判斷是false, 而且把"test"當成0*10之後"指派給$test

測試之後我的判斷是,if()中如果是一個object
php會去判斷這個object的值,如果是0則回報false,如果>0則回報true
ex:
if ($test = 100 + 0) return true
if ($test = 100 * 0) return false
if ($test = "ABC") return true
if ($test = "") return false
if ($test = [1,2,3]) return true
if ($test = []) return false

數字形態看值,字串及array應該是看length,其他東西怎麼判斷可能就要試看看了

想請教的是 .. 我慣用語言是C#,不會也不能這樣寫if()
但在php中是否常有人用這樣的寫法呢?
因為不會報錯,我想所以除錯上可能會遇到一些麻煩?

微笑 iT邦研究生 5 級 ‧ 2020-12-28 13:54:03 檢舉

是因為0代表false,其他數字代表true而已,這在大部份弱型別語言是共通的
其他語言不能跑比較有可能是因為你沒有給$test初始值

0
sccool
iT邦新手 5 級 ‧ 2021-03-23 03:23:26

$weather = "sunny";
if($weather = "raining"){ <-- 這裡把$weater變成了raining 並沒有比較 (==)
echo "No, it is ".$weather;
}else{
echo "Yeah, it is ".$weather;
}

0

第三篇簽到!
//1110216(三)1744_By Zi

falconwei iT邦新手 5 級 ‧ 2022-02-16 18:01:14 檢舉

有看不懂的地方留言 我再改寫一次

我要留言

立即登入留言